/**
 * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
 */

import errorCode from "./errorCode";

// 此处第二个参数vm，就是我们在页面使用的this，你可以通过vm获取vuex等操作
const install = (Vue, vm) => {

    // 通用请求头设定
    const ajaxHeader = 'x-ajax';
    const sessionIdHeader = 'Authorization';
	const contentType = 'Content-Type';

    // 请求参数默认配置
    Vue.prototype.$u.http.setConfig({
        baseUrl: vm.vuex_config.baseUrl,
        originalData: true,
    });

    // 请求拦截，配置Token等参数
    Vue.prototype.$u.http.interceptor.request = (req) => {
        if (!req.header) {
            req.header = [];
        }

        // 默认指定返回 JSON 数据
        if (!req.header[ajaxHeader]) {
            req.header[ajaxHeader] = 'json';
			req.header[contentType] = 'application/json'
        }

        // 设定传递 Token 认证参数
        if (!req.header[sessionIdHeader] && vm.vuex_token) {
            req.header[sessionIdHeader] = vm.vuex_token;
        }
        return req;
    }

    // 响应拦截，判断状态码是否通过
    Vue.prototype.$u.http.interceptor.response = async (res, req) => {
		const code = res.data.code;
		const message = res.data.msg;

        // token过期，重新登录
        if (code === 401) {
            vm.$u.toast('身份过期，请重新登录');
            vm.$u.api.logout().then(res => {
                //清空存储信息
                vm.$u.vuex('vuex_token', '')
                vm.$u.vuex('vuex_user', {})

                setTimeout(() => {
                    uni.reLaunch({
                    	url: "/pages/login/login",
                    });
                }, 500);

            });
            return
        }

        // if (code !== 200) {
        //     vm.$u.toast(message);
        //     return Promise.reject(new Error(message))
        // }

        return res.data;
    }

    // 封装 post json 请求
    vm.$u.postJson = (url, data = {}, header = {}) => {
        header['content-type'] = 'application/json';
        return vm.$u.http.request({
            url,
            method: 'POST',
            data
        })
    }

}

export default {
    install
}
